package com.whmall.service.crm.module.companyuser.impl;

import cn.hutool.core.lang.Validator;
import com.whmall.component.common.AbstractObjectValidator;
import com.whmall.service.crm.entity.dto.companyuser.CreateOrUpdateCompanyUserReqDTO;
import com.whmall.service.crm.module.companyuser.entity.CompanyUserDO;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * 创建或更新用户验证器
 *
 * @author alex
 * @since 2020/7/31
 */
@Component
public class CreateOrUpdateCompanyUserReqDTOValidator
        extends AbstractObjectValidator<CreateOrUpdateCompanyUserReqDTO> {

    public void validate(CreateOrUpdateCompanyUserReqDTO target, boolean isNullable) {
        if (null == target) {
            throw new IllegalArgumentException("target不能为空");
        }

        validateExpression(target.getName(), isNullable,
                () -> StringUtils.hasText(target.getName()),
                "name不能为空");

        //
        // 允许为null
        // 允许为空字符串
        // 不允许格式不正确
        validateExpression(target.getEmail(), true,
                () -> !StringUtils.hasLength(target.getEmail())
                        || Validator.isEmail(target.getEmail()),
                "email格式不正确");

        //
        // 允许为null
        // 允许为空字符串
        // 不允许格式不正确
        validateExpression(target.getMobile(), true,
                () -> !StringUtils.hasLength(target.getMobile())
                        || Validator.isMobile(target.getMobile()),
                "mobile格式不正确");

        validateExpression(target.getPosition(), isNullable,
                () -> StringUtils.hasText(target.getPosition()),
                "position不能为空");
    }

    public void afterPropertySetValidate(CompanyUserDO companyUser) {
        if (!StringUtils.hasLength(companyUser.getMobile())
                && !StringUtils.hasLength(companyUser.getEmail())) {
            throw new IllegalArgumentException("email和mobile不能同时为空");
        }
    }
}
